Win 上可以装 Openssh Server,之前试了可以连进去。不过 Win 原生有远程的一些命令可以使用,通常没必要使用 ssh。
以下所有说明基于标准的域环境。
RSAT 主要涉及到使用 IPC (进程间通信) Inter-Process Communication
IPC$ (Inter-Process Communication):这是 Windows 的一个隐藏共享,专门用于进程间通信。
RPC/SMB
RPC 是老协议,但是域控到普通机子仍然一直在走 RPC
远程过程调用。它是 Windows NT 时代就存在的基石技术。它的核心思想是:让在一台电脑上运行的程序,能够像调用本地函数一样,去调用另一台电脑上的函数。
走 RPC (Remote Procedure Call) / SMB 的命令:
quser/qwinsta(查询用户)logoff(注销用户)sc(服务控制)services.msc(远程连接服务控制台)PsExec(虽然它利用 SMB 管道,但本质依赖 RPC/DCOM 机制)
注意 SMB 是 RPC 的“载体”,也负责 组策略 (Group Policy) 的分发。
示例命令(远程注销用户登录,用于桌面卡死,无法远程)
1 | qwinsta /server:<pcname> |
WinRM
Windows 远程管理。它是微软对 WS-Management 协议的实现。这是一种基于 Web 标准(SOAP/XML)的协议。
WinRM 并不是为了完全替代 RPC 而生的,它只是为了“替代 RPC 在远程管理领域的角色”。(协议开销更大,历史包袱与生态)
WinRM 只使用两个端口: TCP 5985 (HTTP), TCP 5986 (HTTPS)
虽然默认端口叫 HTTP,但在域环境中,WinRM 的 Payload(负载数据)是经过 Kerberos 密钥加密的。它不是明文传输。
如果需要更高安全性(如通过互联网管理),可以配置 SSL 证书开启 HTTPS。
WinRM 可以通过配置(JEA - Just Enough Administration)限制远程用户只能运行特定的几条命令,而 RPC 这种控制很难实现。
走 WinRM (Windows Remote Management) 的命令:
Invoke-CommandEnter-PSSession- 所有带
-ComputerName参数且非 WMI/DCOM 实现的 PowerShell Cmdlet。
示例命令(重启服务)
1 | Invoke-Command -ComputerName <pcname> -ScriptBlock { Restart-Service TermService -Force } |
在 CMD 时代,微软专门提供了一个基于 WinRM 协议的命令行工具,叫做 winrs (Windows Remote Shell)。但是因为返回值以及其他一些功能深度上的问题,一般还是建议 Powershell